/*
* created by Administrator on 2018/11/29
* 好的代码像粥一样,是得用时间和精力熬的。
*/
// 异步操作
setTimeout(function () {
    console.log(1);
    setTimeout(function () {
        console.log(2);
        setTimeout(function () {
            console.log(3);
        }, 5000)
    }, 5000)
}, 5000);
// 改造异步操作 同步化写法
// new Promise（）；实例
new Promise(function (resolve) {
    setTimeout(function () {
        resolve(5);
    }, 5000)
}).then(function (data) {
    console.log(data);
}).catch(function (error) {
    console.log(error);
}).finally(function () {
    // 不论成功与否都要执行
});
// 工厂模式
function timeout (time, value) {
    return new Promise(function (resolve) {
        setTimeout(function () {
            resolve(value)
        }, time)
    })
}
timeout(5000, 5)
    .then(function (data) {console.log(data); return timeout(5000, 6)})
    .then(function (data) {console.log(data); return timeout(5000, 7)})
    .then(function (data) {console.log(data);})
    .catch(function (error) {console.log(error);});

// static methods
// 1.all 并行 用时最长的
function timeout (time, value) {
    return new Promise(function (resolve) {
        setTimeout(function () {
            resolve(value)
        }, time)
    })
}
Promise.all([timeout(1000, 5),timeout(2000, 6),timeout(500, 7),timeout(2000, 8),]);
// 2.race  谁最快谁最先出来
// 3.then

function ajax (method, url) {
    return new Promise(function (resolve, reject) {
        let xhl = new XMLHttpRequest();

    })
}


// Generator 手动控制函数进行程度 在当前yield与下一个yield之间停止
// yield 没有返回值
let gen = function * () {
    let res = yield delay(1, 5);
    console.log(res);
};

let timeDelay = gen();

function delay (time, value) {
    setTimeout(function () {
        timeDelay.next(value);
    }, time)
}
timeDelay.next();

// ES8 asyns 函数 generator 和 promise 的集合体
let yibu = async function f() {
    try{
        let a = timeout()
    }
};
